#ifndef LIST 
#define LIST

#include<malloc.h>

typedef struct list_node_ list_node_;
typedef list_node_* list_node;

//节点数据类型
struct list_node_{
    void* data;
    list_node next;
};

//创建链表
extern list_node create_list();

//添加节点
//头插法
extern list_node add_node(list_node head,void* data);

//查找节点
//如果没找到则返回-1,否则返回其在链表中的位置
extern int find_node(const list_node head,void *data,int (*equal)(void* data,void *other));

//删除节点
//通过查找函数得到的结果删除
extern list_node delete_node(list_node head,int index);

//判断链表是否为空
extern int is_list_empty(list_node this);

//遍历链表
extern void iter_list(const list_node head,void (*func)(void* data));

//清空链表
void clear_list(list_node head);

#endif